package vista;

import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import godzilla.ciudad.estructuras.Estructura;

public abstract class RepresentacionEstructura {


	protected String nombre;
	protected BufferedImage imagen;
	protected Estructura estructuraReal;
	protected static BufferedImage imagenProblemas;
	protected static BufferedImage imagenAgua;
	protected static BufferedImage imagenDestruir;
	protected static BufferedImage imagenDestruido;
	protected static Image imagenGodzilla;
	
	static{
		try {
			imagenAgua = ImageIO.read(new File("Imagenes/agua.png"));
	        imagenProblemas = ImageIO.read(new File("Imagenes/imagenProblemas.png"));
	        imagenDestruir = ImageIO.read(new File("Imagenes/imagenDestruir.png"));
	        imagenDestruido = ImageIO.read(new File("Imagenes/imagenDestruido.png"));
	        imagenGodzilla = ImageIO.read(new File("Imagenes/imagenGodzilla.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public RepresentacionEstructura(){
		
		cargarEstructuraAsociada();
		cargarImagenAsociada();
	}


	protected abstract void cargarEstructuraAsociada();

	private void cargarImagenAsociada() {
		try {                
	          imagen = ImageIO.read(new File(this.rutaArchivoImagen()));

	          

	   } catch (IOException ex) {

	   }
		
	}

	public Estructura estructuraRealAsignada(){
		return this.estructuraReal;
	}

	public abstract String nombre();
	
	public abstract Color colorAsociado();

	public boolean esLaRepresentacionDe(Estructura dato) {

		return (this.estructuraRealAsignada().getClass() == dato.getClass());
	}

	public boolean esSubterranea() {
		return this.estructuraRealAsignada().esSubterranea();
	}

	public BufferedImage imagenAsociada() {
		
		return this.imagen;
	
	}

	protected abstract String rutaArchivoImagen();


	public static Image imagenProblemas() {
		return imagenProblemas;
	}


	public static Image imagenAgua() {
		return imagenAgua;
	}


	public static Image imagenDestruir() {
		return imagenDestruir;
	}


	public static Image imagenGodzilla() {
		return imagenGodzilla;
	}


	public static Image imagenDestruido() {
		return imagenDestruido;
	}
	

}
